草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - RAII状态管理

我需要改变一个状态。然后做事。然后将状态重置为原来的状态-例如:autooldActivationOrder=mdiArea->activationOrder();mdiArea->setActivationOrder(QMdiArea::StackingOrder);mdiArea->cascadeSubWindows();mdiArea->setActivationOrder(oldActivationOrder);我如何以RAII方式执行此操作?(C++11和/或14)编辑:感谢您的所有回答。有几个创建自定义类来处理状态更改的建议(BoBTFish、mindriot、Mattia

C++ STL 范围容器

我正在寻找一个从double映射到对象指针的容器。但是,每个键只是与该对象对应的一系列double值。例如,可能有一个键/值对或container[1.0]应该返回ptr,container[3.0]也应该返回ptr,container[-1.0]应该是未定义的。是否有任何默认情况下具有类似行为的对象,还是我必须自己实现它?编辑这是我编写的实际代码,可能更容易对其进行调试/提供建议。//Behavior:Arangeisdefinedmathematicallyas(min,max]classdblRange{public:doublemin;doublemax;dblRange(do

c++ - STL 算法和 const_iterators

今天我写了一个小谓词来查找容器中的匹配符号。但是我遇到了一个问题:我想在类的常量方法内的std::find_if调用中使用这个谓词,在属于这个类。但我刚刚注意到std::find和std::find_if都不能对const_iterators进行操作!我检查了一些C++引用资料,似乎没有std::find或std::find_if版本接受/返回const_iterators。我只是不明白为什么,因为据我所见,这些算法无法修改迭代器引用的对象。这是在SGI实现中记录std::find的方式:Returnsthefirstiteratoriintherange[first,last)suc

c++ - STL性能O(ln(n))题

拜托,有人可以解释一下吗:如果文档说STLstd::vectorfindingelementspeedperformace=O(ln(n)),这是什么意思。O(ln(n))-什么是“O”,我可以在哪里读到它?我可以在哪里阅读有关其他STL容器性能的信息非常感谢 最佳答案 BigOnotation是一种衡量算法如何随着其处理的数据规模增长而扩展的方法。如果一个vector通常是O(n),则查找一个元素,当vector被排序并且您使用其中一个时,它只是O(lg(n))binarysearchfamilyofalgorithms.每个算法

c++ - 使用STL随机化数组条目的简单方法?

我可以使用STL对int*数组进行排序,像一样简单明了std::sort(myarray,myarray+size);有没有同样简单的随机化方法?谢谢 最佳答案 std::random_shuffle(myarray,myarray+size); 关于c++-使用STL随机化数组条目的简单方法?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2208411/

C++ STL集实现

为什么C++集实现为二叉树而不是哈希集,与二叉树提供的O(logn)相比,它可以提供O(1)的平均情况复杂度? 最佳答案 因为C++集合由T的比较运算符排序,这使得以可预测的方式迭代成员成为可能。如果您知道您将对集合做的所有事情是插入、测试成员资格和/或删除元素,那么自C++11以来就存在实现哈希集的std::unordered_set。 关于C++STL集实现,我们在StackOverflow上找到一个类似的问题: https://stackoverflow

c++ - 适用于 STL 容器的简单 C++ 模板

我需要一个像这样的模板,它工作得很好templatevoidmySuperTempalte(constcontainermyCont){//dosomethinghere}然后我想专门为std::string设计上述模板,所以我想到了templatevoidmySuperTempalte(constcontainermyCont){//checktypeofcontainer//dosomethinghere}这不起作用,并抛出错误。我想让第二个示例工作,然后如果可能的话,我想在模板中添加一些代码来检查是否使用了std::vector/std::deque/std::list,以便在每

c++ - STL map 容器在构造时是否优化(平衡树)?

如果我将元素的有序(递增)序列插入到映射中,最终的二叉树会以某种方式得到优化吗?或者每个元素都会有一个“正确”的child?这将使这样的树非常低效,因为然后查找将是线性的。我找不到任何关于插入STL映射过程的详细信息。 最佳答案 C++11标准(23.1)要求关联容器的insert和find的对数复杂度。从两个迭代器i和j构造它们使得[i,j)表示适当排序的值范围甚至需要具有线性时间复杂。这是否意味着“最终的二叉树被优化”,或者map是否根本就是二叉树,尚无定论。但实际上,std::set、std::map和它们的多友元实际上总是红

c++ - 使用 std::deque::iterator(在 C++ STL 中)搜索和删除某些元素

我在调用以下代码时遇到问题:#includeusingnamespacestd;dequedeq={0,1,2,3,4,5,6,7,8};for(autoit=deq.begin();it!=deq.end();it++){if(*it%2==0)deq.erase(it);}这导致了段错误。在查看问题后,我发现问题在于STL管理双端队列迭代器的方式:如果被删除的元素更接近双端队列的末尾,用于指向被删除元素的迭代器现在将指向NEXT元素,但不是前一个元素为vector::iterator做。我知道从it!=deq.end()修改循环条件至it可能会解决这个问题,但我只是想知道是否有一种

c++ - 如何使用 STL::map 作为二维数组

您能告诉我们如何使用STL:map作为二维数组吗?我想像mymap[i][j]一样访问单个元素,我事先不知道i或j的值是多少。有没有更好的想法以其他方式做同样的事情? 最佳答案 你可以做到std::map>mymap;例如:#include#includeintmain(){std::map>mymap;mymap[9][2]=7;std::cout在标准输出上打印7,然后是“我的map包含[9][2]的值”。 关于c++-如何使用STL::map作为二维数组,我们在StackOverf